﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using TheBullysStore.Models.ModuloAdministracion.Edificio;
using System.Configuration;
using System.Data.SqlClient;

namespace TheBullysStore.Models.ModuloServicios.CuotaDepartamento
{
    public class CuotaDepartamentoDAO
    {
        public List<CuotaDepartamentoBean> ListarCuotaDepartamento(CuotaDepartamentoBean cuotaDepartamento)
        {
            int diaFinal = 0;
            int diaFinal2 = 0;
            try
            {
                List<CuotaDepartamentoBean> listacuota = new List<CuotaDepartamentoBean>();
                
                String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["TheBullysStore"].ConnectionString;

                SqlConnection sqlCon = new SqlConnection(cadenaConfiguracion);

                sqlCon.Open();

                diaFinal = DateTime.DaysInMonth(cuotaDepartamento.Anio, cuotaDepartamento.Mes);
                diaFinal2 = DateTime.DaysInMonth(cuotaDepartamento.AnioFin, cuotaDepartamento.MesFin);

                double monto = 0.00;

                string commandString = "select isnull(sum(monto),0) from documento_de_pago where estado=1 and id_edificio=" + cuotaDepartamento.IdEdificio + " and fecha_registro between '01-" + cuotaDepartamento.Mes + "-" + cuotaDepartamento.Anio + "' and '" + diaFinal2 + "-" + cuotaDepartamento.MesFin + "-" + cuotaDepartamento.AnioFin + "' and not(tipo_gasto=5) ";

                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);

                SqlDataReader dataReader = sqlCmd.ExecuteReader();

                while (dataReader.Read())
                {
                    monto = Convert.ToDouble(dataReader[0]);

                }
                dataReader.Close();
                sqlCon.Close();

                ///////////////////////////////////////////////////////////////////////
                
                int numMeses = cuotaDepartamento.MesFin - cuotaDepartamento.Mes;
                
                    // MANTENIMIENTO UNICO
                    
                    sqlCon.Open();

                    commandString = "select count(*) from departamento where  estado=1 and id_edificio=" + cuotaDepartamento.IdEdificio + " ";

                    SqlCommand sqlCmd2 = new SqlCommand(commandString, sqlCon);
                    Int32 count = (Int32)sqlCmd2.ExecuteScalar();

                    if (numMeses == 0)
                    {
                        cuotaDepartamento.MontoTotalUnico = ((cuotaDepartamento.Ganancia + monto) / count);
                        cuotaDepartamento.MontoTotalUnico = (Math.Truncate(cuotaDepartamento.MontoTotalUnico * 100) / 100);
                    }
                    else
                    {
                        cuotaDepartamento.MontoTotalUnico = ((cuotaDepartamento.Ganancia + monto) / count) / numMeses;
                        cuotaDepartamento.MontoTotalUnico = (Math.Truncate(cuotaDepartamento.MontoTotalUnico * 100) / 100);
                    }//listacuota.Add(CuotaDepartamento);
                    sqlCon.Close();


                //MANTENIMIENTO POR AREA
                    sqlCon.Open();                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                

                    commandString = "select sum(area) from departamento where  estado=1 and id_edificio=" + cuotaDepartamento.IdEdificio + " ";

                    sqlCmd = new SqlCommand(commandString, sqlCon);

                    dataReader = sqlCmd.ExecuteReader();

                    //CuotaDepartamentoBean CuotaDepartamento2 = new CuotaDepartamentoBean();


                    while (dataReader.Read())
                    {

                        if (numMeses == 0)
                        {
                            cuotaDepartamento.MontoTotalArea = ((cuotaDepartamento.Ganancia + monto) / Convert.ToDouble(dataReader[0]));
                            cuotaDepartamento.MontoTotalArea=(Math.Truncate(cuotaDepartamento.MontoTotalArea * 100) / 100);
                        }
                        else
                        {
                            cuotaDepartamento.MontoTotalArea = ((cuotaDepartamento.Ganancia + monto) / Convert.ToDouble(dataReader[0])) / numMeses;
                            cuotaDepartamento.MontoTotalArea = (Math.Truncate(cuotaDepartamento.MontoTotalArea * 100) / 100);
                        }
                    }

                    listacuota.Add(cuotaDepartamento);
                    dataReader.Close();
                    sqlCon.Close();
                
                                
              //////////////////////////////////////////////////////////////////////////////

                return listacuota;
            }
            catch (Exception e)
            {
                String men = e.ToString();
                cuotaDepartamento.Conexion = men;
                return null;
            }
        }


        public CuotaDepartamentoBean cargarMinimoyMaximo(CuotaDepartamentoBean cuotaDepartamento)
        {

            try
            {
                List<CuotaDepartamentoBean> listacuota = new List<CuotaDepartamentoBean>();

                String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["TheBullysStore"].ConnectionString;

                SqlConnection sqlCon = new SqlConnection(cadenaConfiguracion);

                sqlCon.Open();



                string commandString = "select isnull(min(fecha_registro),0) from documento_de_pago where estado=1 and id_edificio=" + cuotaDepartamento.IdEdificio + " and not(tipo_gasto=5) ";

                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);

                SqlDataReader dataReader = sqlCmd.ExecuteReader();

                DateTime min= DateTime.Today;

                while (dataReader.Read())
                {
                    min = Convert.ToDateTime(dataReader[0]);

                }
                
                if (cuotaDepartamento.Anio <= min.Year)
                {
                    if (cuotaDepartamento.Mes <= min.Month)
                    {
                        cuotaDepartamento.Mes = min.Month;
                        cuotaDepartamento.Anio = min.Year;
                    }
                }
                dataReader.Close();
                sqlCon.Close();

                sqlCon.Open();

                DateTime max = DateTime.Today;

                string commandString2 = "select isnull(max(fecha_registro),0) from documento_de_pago where estado=1 and id_edificio=" + cuotaDepartamento.IdEdificio + " and not(tipo_gasto=5) ";

                SqlCommand sqlCmd2 = new SqlCommand(commandString2, sqlCon);

                SqlDataReader dataReader2 = sqlCmd.ExecuteReader();

                while (dataReader2.Read())
                {
                    max = Convert.ToDateTime(dataReader2[0]);

                }

                if (cuotaDepartamento.AnioFin >= max.Year)
                {
                    if (cuotaDepartamento.MesFin >= max.Month)
                    {
                        cuotaDepartamento.MesFin = max.Month;
                        cuotaDepartamento.AnioFin = max.Year;
                    }
                }


                dataReader2.Close();
                sqlCon.Close();

                return cuotaDepartamento;

            }
            catch (Exception e)
            {
                String men = e.ToString();
                cuotaDepartamento.Conexion = men;
                return null;
            }
        }


    }
}